package filters;

import util.Sesiones;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author JFM
 */
public class LoginFilter implements Filter
	{
	private boolean validar;

	public void doFilter (ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException
		{
		if(req instanceof HttpServletRequest)
			{
			HttpServletRequest request = (HttpServletRequest) req;
			HttpSession session = request.getSession();

			String uri = request.getRequestURI();
			uri = uri.substring(request.getContextPath().length(), uri.length());

			// Verifico que la pagina no sea una imagen, un css, un js, la pagina de inicio o el servicio de login.
			boolean esPublico = uri.startsWith("/css/") ||
								uri.startsWith("/icon/") ||
								uri.startsWith("/img/") ||
								uri.startsWith("/js/") || 
								uri.startsWith("/jspf/") || 
								uri.startsWith("/index.jsp") || 
								uri.startsWith("/svcs/login.jsp") || 
								uri.startsWith("/test.jsp");

			// Si no es un recurso publico, verifico que tenga permisos para el mismo.
			boolean tienePermiso = false;
			if(!esPublico && Sesiones.isLogueado(session))
				{
				if(uri.startsWith("/Excel")) tienePermiso = true;
                                if(uri.startsWith("/Pdf")) tienePermiso = true;
				if(uri.startsWith("/svcs/")) tienePermiso = true;
				if(uri.startsWith("/capacidades-uteco.jsp")) tienePermiso = Sesiones.tienePermiso(session, "capacidades_uteco", "read");
				if(uri.startsWith("/capacidades.jsp")) tienePermiso = Sesiones.tienePermiso(session, "capacidades_newlong", "read");
				if(uri.startsWith("/ciclos-newlong-edit.jsp")) tienePermiso = Sesiones.tienePermiso(session, "ciclos_newlong", "write");
				if(uri.startsWith("/ciclos-newlong.jsp")) tienePermiso = Sesiones.tienePermiso(session, "ciclos_newlong", "read");
				if(uri.startsWith("/old-ciclos-newlong.jsp")) tienePermiso = Sesiones.tienePermiso(session, "ciclos_newlong", "read");
				if(uri.startsWith("/ciclos-uteco-edit.jsp")) tienePermiso = Sesiones.tienePermiso(session, "ciclos_uteco", "write");
				if(uri.startsWith("/ciclos-uteco.jsp")) tienePermiso = Sesiones.tienePermiso(session, "ciclos_uteco", "read");
				if(uri.startsWith("/old-ciclos-uteco-edit.jsp")) tienePermiso = Sesiones.tienePermiso(session, "ciclos_uteco", "write");
				if(uri.startsWith("/old-ciclos-uteco.jsp")) tienePermiso = Sesiones.tienePermiso(session, "ciclos_uteco", "read");
				if(uri.startsWith("/clientes.jsp")) tienePermiso = Sesiones.tienePermiso(session, "clientes", "read");
				if(uri.startsWith("/disponible-prometer.jsp")) tienePermiso = Sesiones.tienePermiso(session, "disponible_prometer", "read");
				if(uri.startsWith("/estacionalidad.jsp")) tienePermiso = Sesiones.tienePermiso(session, "estacionalidad", "read");
				if(uri.startsWith("/graficos-carga-uteco.jsp")) tienePermiso = Sesiones.tienePermiso(session, "grafico_carga_trabajo_newlong", "read");
				if(uri.startsWith("/graficos-carga.jsp")) tienePermiso = Sesiones.tienePermiso(session, "grafico_carga_trabajo_uteco", "read");
				if(uri.startsWith("/graficos-ocupacion-uteco.jsp")) tienePermiso = Sesiones.tienePermiso(session, "grafico_ocupacion_uteco", "read");
				if(uri.startsWith("/graficos-ocupacion.jsp")) tienePermiso = Sesiones.tienePermiso(session, "grafico_ocupacion_newlong", "read");
				if(uri.startsWith("/lineas.jsp")) tienePermiso = Sesiones.tienePermiso(session, "lineas", "read");
				if(uri.startsWith("/manijas.jsp")) tienePermiso = Sesiones.tienePermiso(session, "manijas", "read");
				if(uri.startsWith("/newlongs.jsp")) tienePermiso = Sesiones.tienePermiso(session, "newlongs", "read");
				if(uri.startsWith("/perfiles.jsp")) tienePermiso = Sesiones.tienePermiso(session, "perfiles", "read");
				if(uri.startsWith("/programacion-uteco.jsp")) tienePermiso = Sesiones.tienePermiso(session, "programacion_uteco", "read");
				if(uri.startsWith("/programacion.jsp")) tienePermiso = Sesiones.tienePermiso(session, "programacion_newlong", "read");
				if(uri.startsWith("/planificar-uteco.jsp")) tienePermiso = Sesiones.tienePermiso(session, "planificar_uteco", "read");
				if(uri.startsWith("/planificar-newlong.jsp")) tienePermiso = Sesiones.tienePermiso(session, "planificar_newlong", "read");
				if(uri.startsWith("/proporciones-newlong.jsp")) tienePermiso = Sesiones.tienePermiso(session, "proporciones_newlong", "read");
				if(uri.startsWith("/restricciones.jsp")) tienePermiso = Sesiones.tienePermiso(session, "restricciones", "read");
				if(uri.startsWith("/tipos-papel.jsp")) tienePermiso = Sesiones.tienePermiso(session, "tipos_papel", "read");
				if(uri.startsWith("/usuarios.jsp")) tienePermiso = Sesiones.tienePermiso(session, "usuarios", "read");
				if(uri.startsWith("/utecos.jsp")) tienePermiso = Sesiones.tienePermiso(session, "utecos", "read");
				if(uri.startsWith("/formatos.jsp")) tienePermiso = Sesiones.tienePermiso(session, "formatos", "read");
				if(uri.startsWith("/orden-alta.jsp")) tienePermiso = Sesiones.tienePermiso(session, "ordenes_alta", "read");
				if(uri.startsWith("/ordenes-trabajo.jsp")) tienePermiso = Sesiones.tienePermiso(session, "ordenes_trabajo", "read");
				if(uri.startsWith("/ordenes-trabajo-edit.jsp")) tienePermiso = Sesiones.tienePermiso(session, "ordenes_trabajo", "read");
				if(uri.startsWith("/ordenes-venta.jsp")) tienePermiso = Sesiones.tienePermiso(session, "ordenes_venta", "read");
				if(uri.startsWith("/jupiter.jsp")) tienePermiso = Sesiones.tienePermiso(session, "jupiter", "read");
                                if(uri.startsWith("/partestrabajouteco.jsp")) tienePermiso = Sesiones.tienePermiso(session, "partestrabajouteco", "read");
                                if(uri.startsWith("/partestrabajonewlong.jsp")) tienePermiso = Sesiones.tienePermiso(session, "partestrabajonewlong", "read");
                                if(uri.startsWith("/ExistsWO")) tienePermiso = true;
				}

			if(!validar || esPublico || tienePermiso)
				{
				// Si esta logueado o si esta queriendo acceder a un recurso publico, continuo.
				chain.doFilter(req, res);
				}
			else
				{
				// Si no esta logueado y quiere acceder a un recurso privado, lo envio a la pagina de login.
				((HttpServletResponse)res).sendRedirect(((HttpServletRequest)req).getContextPath() + "/index.jsp");
				}
			}
		else
			{ chain.doFilter(req, res); }
		}

	public void init(FilterConfig filterConfig) throws ServletException
		{
		String param = filterConfig.getInitParameter("validar");
        this.validar = param != null && param.compareToIgnoreCase("true") == 0;
		}

	public void destroy()
		{ }
	}
